/*  
Ajax 三级省市联动  
日期：2012-7-18  
  
settings 参数说明  
-----  
url:省市数据josn文件路径  
prov:默认省份  
city:默认城市  
dist:默认地区（县）  
nodata:无数据状态  
required:必选项  
------------------------------ */  
(function($){  
    $.fn.citySelect=function(settings){  
        if(this.length<1){return;};  
  
        // 默认值  
        settings=$.extend({  
            url:"js/city/city.min.js",  
            prov:null,  
            city:null,  
            dist:null,  
            nodata:null,  
            required:true  
        },settings);  
  
        var box_obj=this;  
        var prov_obj=box_obj.find(".prov");  
        var city_obj=box_obj.find(".city");  
        var dist_obj=box_obj.find(".dist");  
        var prov_val=settings.prov;  
        var city_val=settings.city;  
        var dist_val=settings.dist;  
        var select_prehtml=(settings.required) ? "" : "<option value=''>请选择</option>";  
        var city_json;  
  
        // 赋值市级函数  
        var cityStart=function(){  
            var prov_id=prov_obj.get(0).selectedIndex;  
            if(!settings.required){  
                prov_id--;  
            };  
            city_obj.empty().attr("disabled",true);  
            dist_obj.empty().attr("disabled",true);  
  
            if(prov_id<0||typeof(city_json.citylist[prov_id].c)=="undefined"){  
                if(settings.nodata=="none"){  
                    city_obj.css("display","none");  
                    dist_obj.css("display","none");  
                }else if(settings.nodata=="hidden"){  
                    city_obj.css("visibility","hidden");  
                    dist_obj.css("visibility","hidden");  
                };  
                return;  
            };  
              
            // 遍历赋值市级下拉列表  
            temp_html=select_prehtml;  
            $.each(city_json.citylist[prov_id].c,function(i,city){  
                temp_html+="<option value='"+city.n+"'>"+city.n+"</option>";  
            });  
            city_obj.html(temp_html).attr("disabled",false).css({"display":"","visibility":""});  
            distStart();  
        };  
  
        // 赋值地区（县）函数  
        var distStart=function(){  
            var prov_id=prov_obj.get(0).selectedIndex;  
            var city_id=city_obj.get(0).selectedIndex;  
            if(!settings.required){  
                prov_id--;  
                city_id--;  
            };  
            dist_obj.empty().attr("disabled",true);  
  
            if(prov_id<0||city_id<0||typeof(city_json.citylist[prov_id].c[city_id].a)=="undefined"){  
                if(settings.nodata=="none"){  
                    dist_obj.css("display","none");  
                }else if(settings.nodata=="hidden"){  
                    dist_obj.css("visibility","hidden");  
                };  
                return;  
            };  
              
            // 遍历赋值市级下拉列表  
            temp_html=select_prehtml;  
            $.each(city_json.citylist[prov_id].c[city_id].a,function(i,dist){  
                temp_html+="<option value='"+dist.s+"'>"+dist.s+"</option>";  
            });  
            dist_obj.html(temp_html).attr("disabled",false).css({"display":"","visibility":""});  
        };  
  
        var init=function(){  
            // 遍历赋值省份下拉列表  
            temp_html=select_prehtml;  
            $.each(city_json.citylist,function(i,prov){  
                temp_html+="<option value='"+prov.p+"'>"+prov.p+"</option>";  
            });  
            prov_obj.html(temp_html);  
  
            // 若有传入省份与市级的值，则选中。（setTimeout为兼容IE6而设置）  
            setTimeout(function(){  
                if(settings.prov!=null){  
                    prov_obj.val(settings.prov);  
                    cityStart();  
                    setTimeout(function(){  
                        if(settings.city!=null){  
                            city_obj.val(settings.city);  
                            distStart();  
                            setTimeout(function(){  
                                if(settings.dist!=null){  
                                    dist_obj.val(settings.dist);  
                                };  
                            },1);  
                        };  
                    },1);  
                };  
            },1);  
  
            // 选择省份时发生事件  
            prov_obj.bind("change",function(){  
                cityStart();  
            });  
  
            // 选择市级时发生事件  
            city_obj.bind("change",function(){  
                distStart();  
            });  
        };  
  
        // 设置省市json数据  
        if(typeof(settings.url)=="string"){  
            $.getJSON(settings.url,function(json){  
                city_json=json;  
                init();  
            });  
        }else{  
            city_json=settings.url;  
            init();  
        };  
    };  
})(jQuery);  